package org.example.com.pattern.structure.adapter

import kotlin.math.sqrt

/**
 *  结构型模式-适配器模式
 * 作用：使接口不兼容的对象能够相互协作
 * 分类：对象适配器、类适配器
 * 对象适配器：适配器类实现了客户端接口，并持有服务端的对象
 * 类适配器：适配器类同时继承客户端和服务端的行为
 */

class RoundHole(val radius: Double) {
    fun fits(peg: RoundPeg): Boolean {
        return getRadius() >= peg.radius
    }

    fun getRadius(): Double {
        return radius
    }
}

open class RoundPeg(val radius: Double) {
    open fun getRadius(): Double {
        return radius
    }
}

class SquarePeg(val width: Double) {
    fun getWidth(): Double {
        return width
    }
}

class SquarePegAdapter(
    r: Double,
    val peg: SquarePeg
) : RoundPeg(r) {

    override fun getRadius(): Double {
        return peg.getWidth() * sqrt(2f) / 2
    }
}